#include "IN1OUT16.h"

IN1OUT16_T* IN1OUT16_t;



//************************************
// Method:    	CALCU_SAMA					//< SAMA运算函数
// Programmer:  lww
// Time:		2018/11/16
// Returns:   	bool						//< 成功：true；失败：false
// Parameter: 	Model_Base_t * arg			//< 模块参数结构体指针
// Parameter: 	float dt					//< 运算周期
// Parameter: 	bool * DI					//< 数字量输入值数组指针
// Parameter: 	bool * DO					//< 数字量输出值数组指针
// Parameter: 	bool * AI					//< 模拟量输入值数组指针
// Parameter: 	bool * AO					//< 模拟量输出值数组指针
//************************************
bool CALCU_SAMA(IN1OUT16)(Model_Base_t* arg, float dt, bool* DI, bool* DO, float* AI, float* AO)
{
	/****************变量定义区开始**************/
	/*<<<<<定义输入变量>>>>>*/
	float Input_Value;				//< 输入值
	/*<<<<<<<<<<<<<<<<<<<<<<*/

	/*<<<<<定义输出变量>>>>>*/
	bool Output_Value[MAX_IN1OUT16_NUM] = { false };	//< 输出值
	/*<<<<<<<<<<<<<<<<<<<<<<*/

	int i;
	unsigned int value;

	/****************变量定义区结束**************/

	NAME(IN1OUT16)* Obj = (NAME(IN1OUT16)*)arg;

	/****************变量赋值**************/
	/*<<<<<输入变量赋值>>>>>*/
	Input_Value = AI[0];
	/*<<<<<<<<<<<<<<<<<<<<<<*/
	/**************变量赋值结束************/

	/********************************************/
	/**************算法功能实现开始**************/
	/********************************************/
	value = (unsigned int)Input_Value;
	for (i = 0; i < Obj->Base.IO_Num.DO_Num; i++)
		Output_Value[i] = (value >> i) & 0x0001;
	/********************************************/
	/**************算法功能实现结束**************/
	/********************************************/

	/****************运算结果输出**************/
	for (i = 0; i < Obj->Base.IO_Num.DO_Num; i++)
		DO[i] = Output_Value[i];
	/**************运算结果输出完毕************/
	return true;
}

